package com.wocai.jrt.admin.user.action;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.inject.Inject;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.vteba.utils.id.ObjectId;
import com.vteba.web.action.GenericAction;
import com.vteba.web.action.JsonBean;
import com.wocai.jrt.admin.user.model.ModuleMenu;
import com.wocai.jrt.admin.user.service.spi.ModuleMenuService;
import com.wocai.jrt.orgadmin.utils.UserUtils;

/**
 * 菜单模块控制器
 * @author yinlei
 * @date 2015-7-6 11:50:56
 */
@Controller
@RequestMapping("/moduleMenu")
public class ModuleMenuAction extends GenericAction<ModuleMenu> {
	private static final Logger LOGGER = LoggerFactory.getLogger(ModuleMenuAction.class);
	
	@Inject
	private ModuleMenuService moduleMenuServiceImpl;
	
	/**
     * 获得菜单模块List，初始化列表页。
     * @param model 参数
     * @return 菜单模块List
     */
    @RequestMapping("/list")
    public String list(ModuleMenu model, Map<String, Object> maps) {
        return "moduleMenu/list";
    }
	
    /**
     * 查询菜单，以及初始化列表页面
     * @param menu 参数
     * @return 查询结果
     */
    @ResponseBody
    @RequestMapping("/query")
    public Map<String, Object> query(@RequestBody ModuleMenu menu) {
    	Map<String, Object> result = new HashMap<String, Object>();
    	try {
    		menu.setOrgId(UserUtils.getOrgId());
    		List<ModuleMenu> list = moduleMenuServiceImpl.pagedList(menu);
    		
    		// 统计的时候，不需要分页
    		menu.setStart(null);
    		int totalRecord = moduleMenuServiceImpl.countBy(menu);
    		
    		if (LOGGER.isDebugEnabled()) {
    			LOGGER.debug("moduleMenu query success.");
    		}
    		
    		// jQuery datatable 就是这样的参数，阿西吧
    		//result.put("sEcho", menu.getEcho());// 这个参数要回传，但是好像也不需要，阿西吧
    		result.put("aaData", list); // 返回的数据
    		result.put("iTotalRecords", totalRecord); // 总记录数
    		result.put("iTotalDisplayRecords", totalRecord); // 显示的记录数
		} catch (Exception e) {
			LOGGER.error("moduleMenu query error, msg=[{}]", e.getMessage());
		}
        return result;
    }
	
	/**
     * 跳转到新增页面
     * @return 新增页面逻辑视图
     */
    @RequestMapping("/add")
    public String add() {
        return "moduleMenu/add";
    }
    
    /**
     * 执行实际的新增操作
     * @param model 要新增的数据
     * @return 新增页面逻辑视图
     */
    @ResponseBody
    @RequestMapping(value = "/doAdd")
    public JsonBean doAdd(@RequestBody ModuleMenu model) {
    	JsonBean bean = new JsonBean();
    	try {
    		model.setModuleId(ObjectId.get().toString());
        	model.setCreateTime(new Date());
        	model.setOrgId(UserUtils.getOrgId());
            int result = moduleMenuServiceImpl.save(model);
            
            if (result == 1) {
                bean.setMessage(SUCCESS);
                bean.setCode(1);
            } else {
                bean.setMessage(ERROR);
            }
		} catch (Exception e) {
			bean.setMessage(ERROR);
			LOGGER.error(e.getMessage());
		}
    	
        return bean;
    }
    
    /**
     * 跳转到编辑信息页面
     * @param model 查询参数，携带ID
     * @return 编辑页面
     */
    @ResponseBody
    @RequestMapping("/edit")
    public ModuleMenu edit(ModuleMenu model) {
    	try {
    		model = moduleMenuServiceImpl.get(model.getModuleId());
		} catch (Exception e) {
			LOGGER.error("edit moduleMenu error, msg=[{}].", e.getMessage());
		}
        return model;
    }
    
    /**
     * 更新菜单模块信息
     * @param model 要更新的菜单模块信息，含有ID
     * @return 操作结果信息
     */
    @ResponseBody
    @RequestMapping("/update")
    public JsonBean update(@RequestBody ModuleMenu model) {
    	JsonBean bean = new JsonBean();
    	if (StringUtils.isBlank(model.getModuleId())) {
    		LOGGER.error("param's moduleId cannot be null.");
    		bean.setMessage("param's moduleId cannot be null.");
    		return bean;
    	}
    	try {
    		int result = moduleMenuServiceImpl.updateById(model);
    		if (result == 1) {
    			bean.setMessage(SUCCESS);
    			bean.setCode(1);
    		} else {
    			bean.setMessage(ERROR);
    		}
		} catch (Exception e) {
			LOGGER.error("update moduleMenu error, msg=[{}].", e.getMessage());
			bean.setMessage(ERROR);
		}
        return bean;
    }
    
    /**
     * 删除菜单模块信息
     * @param id 要删除的菜单模块ID
     */
    @ResponseBody
    @RequestMapping("/delete")
    public JsonBean delete(String id) {
    	JsonBean bean = new JsonBean();
    	if (StringUtils.isBlank(id)) {
    		LOGGER.error("param's id cannot be null.");
    		bean.setMessage("param's id cannot be null.");
    		return bean;
    	}
    	try {
    		int result = moduleMenuServiceImpl.deleteById(id);
    		if (result == 1) {
    			bean.setMessage(SUCCESS);
    			bean.setCode(1);
    		} else {
    			bean.setMessage(ERROR);
    		}
		} catch (Exception e) {
			LOGGER.error("delete moduleMenu error, id=[{}], msg=[{}].", id, e.getMessage());
			bean.setMessage(ERROR);
		}
        return bean;
    }
}
